import { VARIABLE_TYPE } from './constant';
// 查找变量的name,这里因为name是可能会变化的，所以需要实时查询
export const getVariableName = (code, data) => {
  if (!Array.isArray(data)) {
    return;
  }
  const findObj = data.find((it) => it.code === code);
  return findObj && findObj.name;
};
export const findVariableName = (var_type, var_code, variable, var_name) => {
  if (!var_type || !var_code || !variable) {
    return;
  }
  const tempVariable = variable[var_type];
  // 常量 直接返回code
  if (var_type === VARIABLE_TYPE._LITERAL) return var_code;

  // 指标的话，需要在feature_all里面查数据
  // if (var_type === VARIABLE_TYPE._FEATURE) {
  //   return getVariableName(var_code, variable[VARIABLE_TYPE._FEATURE_ALL]);
  // }
  // 枚举值 直接返回name
  if (var_type === VARIABLE_TYPE._ENUM) {
    return var_name;
  }
  // 名单
  if (var_type === VARIABLE_TYPE._NAMELIST) {
    return var_name;
  }
  // 外部数据源
  if (var_type === VARIABLE_TYPE._DATASOURCE) {
    const allList = Object.values(variable).flat();
    return getVariableName(var_code, allList);
  }
  if (Object.prototype.toString.call(var_code) === '[object String]' && var_code.includes('.') && tempVariable.length) {
    // var_code以点号隔开 即为二级变量
    return var_code
      .split('.')
      .map((item, index, arr) => {
        if (!index) {
          return getVariableName(item, tempVariable);
        } else {
          const varIndex = tempVariable.findIndex((item) => item.code === arr[0]);
          if (varIndex > -1) {
            return getVariableName(item, tempVariable[varIndex].children);
          } else {
            return '';
          }
        }
      })
      .join('.');
  }
  return getVariableName(var_code, tempVariable);
};

// 查找变量的值
export const getVariableValue = (value, variables = {}) => {
  const { var_code, var_type, var_name } = value;
  // const code = Array.isArray(var_code) ? var_code.join(',') : var_code;
  let varValue = '';
  switch (var_type) {
    case 'literal':
      varValue = var_code;
      break;
    case 'local_namelist':
      varValue = var_name;
      break;
    case 'enum':
      varValue = var_code + '(' + var_name + ')';
      break;
    default:
      varValue = variables[`${var_type}.${var_code}`] || var_name;
  }
  return typeof varValue === 'boolean' ? varValue.toString() : varValue;
};
